package com.learning.server.design;

/**
 * 桥接模式就是把事物和其具体实现分开，使他们可以各自独立的变化。桥接的用意是：将抽象化与实现化解耦，
 * 使得二者可以独立变化，像我们常用的JDBC桥DriverManager一样，JDBC进行连接数据库的时候，在各个
 * 数据库之间进行切换，基本不需要动太多的代码，甚至丝毫不用动，原因就是JDBC提供统一接口，每个数据库
 * 提供各自的实现，用一个叫做数据库驱动的程序来桥接就行了。
 */

interface BSourceable {
    public void method();
}

class BSourceSub1 implements BSourceable {

    @Override
    public void method() {
        System.out.println("this is the first sub!");
    }
}

class BSourceSub2 implements BSourceable {

    @Override
    public void method() {
        System.out.println("this is the second sub!");
    }
}

public abstract class Bridge {
    private BSourceable source;

    public void method(){
        source.method();
    }

    public BSourceable getSource() {
        return source;
    }

    public void setSource(BSourceable source) {
        this.source = source;
    }
}



class MyBridge extends Bridge  {

    @Override
    public void method(){
        getSource().method();
    }


    public static void main(String[] args) {

        Bridge bridge = new MyBridge();

		/*调用第一个对象*/
        BSourceable source1 = new BSourceSub1();
        bridge.setSource(source1);
        bridge.method();

		/*调用第二个对象*/
        BSourceable source2 = new BSourceSub2();
        bridge.setSource(source2);
        bridge.method();
    }
}
